package com.svgandroid; import android.graphics.Matrix; import android.graphics.RadialGradient; import android.graphics.Shader; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.modules.junit4.PowerMockRunner; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * Created by Vlad Medvedev on 28.01.2016. * vladislav.medvedev@devfactory.com */ @RunWith(PowerMockRunner.class) public class SVGHandlerGradientTransformTest extends SVGHandlerTestSupport { private void testGradientTransform(String val, Matrix matrix) throws Exception { //given when(picture.beginRecording(anyInt(), anyInt())).thenReturn(canvas); SVGParser.SVGHandler parserHandler = spy(this.parserHandler); PowerMockito.whenNew(Matrix.class).withArguments(matrix).thenReturn(matrix); RadialGradient radialGradient = mock(RadialGradient.class); PowerMockito.whenNew(RadialGradient.class).withArguments( eq(10.0f), eq(10.0f), eq(5.0f), any(int[].class), any(float[].class), eq(Shader.TileMode.CLAMP) ).thenReturn(radialGradient); //when startSVG(parserHandler); startElement(parserHandler, attributes(attr("id", "gr1"), attr("cx", "10.0"), attr("cy", "10.0"), attr("r", "5.0"), attr("gradientTransform", val)), "radialGradient"); endElement(parserHandler, "radialGradient"); endSVG(parserHandler); } @Test public void testGradientTransform_Matrix() throws Exception { testGradientTransform("matrix(0.2883 0 0 0.2865 153.3307 265.0264)", matrix); verify(matrix).setValues(new float[]{0.2883f, 0.0f, 153.3307f, 0.0f, 0.2865f, 265.0264f, 0.0f, 0.0f, 1.0f}); } @Test public void testGradientTransform_Translate() throws Exception { testGradientTransform("translate(0,-924.36218)", matrix); verify(matrix).postTranslate(0.0f, -924.36218f); } @Test public void testGradientTransform_Scale() throws Exception { testGradientTransform("scale(100.2,120.34)", matrix); verify(matrix).postScale(100.2f, 120.34f); } @Test public void testGradientTransform_SkewX() throws Exception { testGradientTransform("skewX(240.23)", matrix); verify(matrix).postSkew((float) Math.tan(240.23f), 0.0f); } @Test public void testGradientTransform_SkewY() throws Exception { testGradientTransform("skewY(240.23)", matrix); verify(matrix).postSkew(0.0f, (float) Math.tan(240.23f)); } @Test public void testGradientTransform_Rotate() throws Exception { testGradientTransform("rotate(120.2, 240.23, 123.11)", matrix); verify(matrix).postTranslate(240.23f, 123.11f); verify(matrix).postRotate(120.2f); verify(matrix).postTranslate(-240.23f, -123.11f); } }